home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 10869 / 10869.xpi / content / default.js < prev   
Text File  |  2009-09-01  |  2KB  |  49 lines

  1. // This used to use jQuery, but was rewritten in plan DOM for speed and to get rid of the jQuery dependency.
  2. document.addEventListener('DOMContentLoaded', function() {
  3.   // Click handler for collapsing and expanding objects and arrays
  4.   function collapse(evt) {
  5.     var collapser = evt.target;
  6.    
  7.     var target = collapser.parentNode.getElementsByClassName('collapsible');
  8.     
  9.     if ( ! target.length ) {
  10.       return;
  11.     }
  12.     
  13.     target = target[0];
  14.  
  15.     if ( target.style.display == 'none' ) {
  16.       var ellipsis = target.parentNode.getElementsByClassName('ellipsis')[0];
  17.       target.parentNode.removeChild(ellipsis);
  18.       target.style.display = '';
  19.     } else {
  20.       target.style.display = 'none';
  21.       
  22.       var ellipsis = document.createElement('span');
  23.       ellipsis.className = 'ellipsis';
  24.       ellipsis.innerHTML = ' … ';
  25.       target.parentNode.insertBefore(ellipsis, target);
  26.     }
  27.     
  28.     collapser.innerHTML = ( collapser.innerHTML == '-' ) ? '+' : '-';
  29.   }
  30.   
  31.   function addCollapser(item) {
  32.     // This mainly filters out the root object (which shouldn't be collapsible)
  33.     if ( item.nodeName != 'LI' ) {
  34.       return;
  35.     }
  36.     
  37.     var collapser = document.createElement('div');
  38.     collapser.className = 'collapser';
  39.     collapser.innerHTML = '-';
  40.     collapser.addEventListener('click', collapse, false);
  41.     item.insertBefore(collapser, item.firstChild);
  42.   }
  43.   
  44.   var items = document.getElementsByClassName('collapsible');
  45.   for( var i = 0; i < items.length; i++) {
  46.     addCollapser(items[i].parentNode);
  47.   }
  48. }, false);
  49.